package com;

public class Box {//定义一个奶箱
    private int milke;//定义一个变量牛奶数量
    private  Boolean state=false;//定义一个boolean类型的成员变量表示奶箱是否有牛奶的状态
    public   synchronized  void putMilke(int milke)  {
        //定义一个方法为送奶工送奶的方法，使用synchronized锁进行加锁，牛奶数量作为参数
        if(state){//对奶箱状态进行判断，如果有牛奶就等待客户来取牛奶
            try {//
                wait();//
            } catch (InterruptedException e) {//抛出异常
                e.printStackTrace();//
            }
        }
        this.milke=milke;//将送奶工遍历的数字作为牛奶数量调用方法赋值给本类的变量
        System.out.println("送奶工将第"+this.milke+"瓶奶送到");//
        notifyAll();//如果送了牛奶则唤醒客户过来取奶
        state=true;//将奶箱状态更改为有奶状态
    }
    public  synchronized void getMilke()  {//定义客户取奶的方法
        if(!state){//对奶箱状态进行判断如果没有牛奶就等待送奶工送奶
            try {//
                wait();//
            } catch (InterruptedException e) {//
                e.printStackTrace();//
            }
        }
        this.milke=milke;//送奶将牛奶送到奶箱后，取奶方法中的变量也会访问到这个变量就会得到牛奶
        System.out.println("客户拿到第"+this.milke+"瓶奶");//
        notifyAll();//当客户吧牛奶取走后，就唤醒送奶工进行送奶
        state =false;//同事更改奶箱的状态为无奶状态
    }
}
